package
{
	public class ConcreteSubject implements Subject
	{
		private var score : Number;
		private var damage : String;
		private var dublicate : Boolean;
		private var observers : Array;
		
		public function ConcreteSubject()
		{
			observers = new Array();
		}
		// подключение наблюдателя без дуюликатов
		public function subjectObserver(oNew:Observer):void
		{
			dublicate = false;
			for (var ob:int = 0; ob < observers.length; ob++) 
			{
				if(observers[ob] == oNew){
				dublicate = true;
				trace('Sorry',observers[ob].nomDeGuerre,'is alresdy subscriber');
				}
			}
			if( !dublicate){
				observers.push(oNew);
			}
		}
		// отключение наблюдателя
		public function unsubjectObserver(oNow:Observer):void
		{
			for (var ob:int = 0; ob < this.observers.length; ob++) 
			{
				trace('observers has been remote', this.observers[ob].nomDeGuerre);
				observers.splice(ob,1);
			}
			
		}
		// Уведомить наблюдателей о счете и текущем уровне повреждеиния
		public function notifysubjectObserver(o:Observer):void
		{
			for each (var notify : int in observers) 
			{
				observers[notify].update(score, damage);
			}
			
		}
		public function setScore(score : Number, damage : String) : void{
			this.score = score;
			this.damage = damage;
			notifysubjectObserver(score,damage);
		}
	}
}